package com.kaifamiao.month03.day0310;

import java.util.Arrays;

public class ArrayWork{

    /**
     * 在数组指定位置插入元素
     * @param a 要插入元素的数组
     * @param index 要出入元素的位置，下标
     * @param key  要插入的元素
     * @return 返回新数组
     */
    public int[] add(int[] a, int index, int key){
        // 填写代码
        int[] newArray = new int[a.length + 1];
        System.arraycopy(a, 0, newArray, 0, index);
        newArray[index] = key;
        System.arraycopy(a, index , newArray, index + 1, newArray.length - index - 1);
        return newArray;
    }

    /**
     * 在数组末尾插入元素
     * @param a 要插入元素的数组
     * @param key  要插入的元素
     * @return 返回新数组
     */
    public int[] addLast(int[] a, int key){
        // 填写代码
        return add(a, a.length, key);
    }

    /**
     * 在数组首位插入元素
     * @param a 要插入元素的数组
     * @param key  要插入的元素
     * @return 返回新数组
     */
    public int[] addFirst(int[] a, int key){
        // 填写代码
        return add(a, 0, key);
    }

    // 三个删除方法： 删除指定位置元素 / 删除首位元素 / 删除末尾元素
    /**
     * 删除指定位置元素
     * @param a 需要删除的原数组
     * @param index 需要删除的元素的下标
     * @return  返回新数组
     */
    public int[] delete(int[] a, int index){
        // 填写代码
        int[] newArray = Arrays.copyOf(a,a.length - 1);
        System.arraycopy(a, index + 1, newArray, index, newArray.length - index);
        return newArray;
//        System.arraycopy(a, index +1, a, index, a.length - 1 - index);
//        return Arrays.copyOf(a, a.length - 1 );
//        int[] newArray = new int[a.length - 1];
//        System.arraycopy(a, 0, newArray, 0, index);
//        System.arraycopy(a, index + 1 , newArray, index, newArray.length - index);
//        return newArray;
    }

    /**
     * 删除首位元素
     * @param a 需要删除的原数组
     * @return 返回新数组
     */
    public int[] deleteFirst(int[] a){
        // 填写代码
        return delete(a, 0);
    }

    /**
     * 删除末位元素
     * @param a 需要删除的原数组
     * @return 返回新数组
     */
    public int[] deleteLast(int[] a){
        // 填写代码
        return delete(a, a.length - 1);
    }
}
